<?php

/**
 * encuesta actions.
 *
 * @package    encuestas
 * @subpackage encuesta
 * @author     qualem
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class encuestaActions extends sfActions
{
 /**
  * Executes index action muestra la lista de preguntas por usuario
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {
    //$this->forward('default', 'module');
      $this->usuario = new EncPersona();
      $this->usuario = $this->getUser()->getUsuario();
      if ($this->usuario->getEvaluacionId()!=null)$this->redirect ('evaluacion/index');
      $this->preguntas = EncPreguntaPeer::getPreguntasByUsuario($this->usuario);
  }
  /**
   * Executa la accion grupo y muestra la lita de preguntas por grupo
   * @param sfWebRequest $request
   */
  public function executeGrupo(sfWebRequest $request){
      $this->usuario = new EncPersona();
      $this->usuario = $this->getUser()->getUsuario();
      $grupo = $this->usuario->getEncGrupo();
      if ($grupo->getEvaluacionId()!=null)$this->redirect('evaluacion/index');
      if (!$grupo->closedGrupo()){
          $this->getUser()->setFlash("gupo_not_closed", "El grupo todavía no esta lleno intentelo mas tarde");
          $this->redirect('evaluacion/index');
      }
      $this->preguntas = EncPreguntaPeer::getPreguntasByGrupo($grupo);
      $this->setTemplate("index");

  }
  public function executeSubmitGrupo(sfWebRequest $request){
       $this->forward404Unless($request->isMethod('post'));
      $form = $request->getParameter('pregunta');
      $this->processFormGrupo($form);
      $this->usuario = $this->getUser()->getUsuario();
      $this->redirect ('evaluacion/index');
  }
  public function executeSubmit(sfWebRequest $request){
      $this->forward404Unless($request->isMethod('post'));
      $form = $request->getParameter('pregunta');
      $this->processForm($form);
      $this->usuario = $this->getUser()->getUsuario();
      $this->redirect ('evaluacion/index');
  }
  protected function processForm($form){
        $evaluacion = $this->crearEvaluacion($form);
        $evaluacion->setTipo(EncEvaluacionPeer::TIPO_INDIVIDUO);
        $grupo = EncGrupoPeer::getGrupoValido();
        $grupo->save();
        $persona = new EncPersona();
        $persona = $this->getUser()->getUsuario();
        $persona->setEncEvaluacion($evaluacion);
        $persona->setEncGrupo($grupo);
        $persona->save();

  }
  protected function processFormGrupo($form){

      $evaluacion = $this->crearEvaluacion($form);
      $evaluacion->setTipo(EncEvaluacionPeer::TIPO_IND_GRUP);
        $persona = new EncPersona();
        $persona = $this->getUser()->getUsuario();
        $grupo = new EncGrupo();
        $grupo = $persona->getEncGrupo();
        $persona->setEvaluacionGrupo($evaluacion->getId());

        $personasEnGrupo = $grupo->getEncPersonas();
        $totalPersonasEnGrupo = count($personasEnGrupo);
        $contPersonas = 0;
        $calificacionGrupo = 0;
        $aciertosGrupo =0;
        $fallosGrupo =0;

        foreach($personasEnGrupo as $clave => $valor){
            $evalGrupo = EncEvaluacionPeer::retrieveByPK($valor->getEvaluacionGrupo());
            if($evalGrupo != null){
                $calificacionGrupo += $evalGrupo->getCalificacion();
                $aciertosGrupo += $evalGrupo->getAciertos();
                $fallosGrupo += $evalGrupo->getFallos();
                $contPersonas++;
            }
        }

        if($contPersonas == $totalPersonasEnGrupo && $grupo->closedGrupo()){
            $calificacionGrupo = $calificacionGrupo/$totalPersonasEnGrupo;
            $evGrupo = new EncEvaluacion();
            $evGrupo->setAciertos($aciertosGrupo);
            $evGrupo->setFallos($fallosGrupo);
            $evGrupo->setCalificacion($calificacionGrupo);
            $evGrupo->setTipo(EncEvaluacionPeer::TIPO_GRUPO);
            $evGrupo->save();
            $grupo->setEncEvaluacion($evGrupo);
            $grupo->save();
        }


  }
  public function crearEvaluacion($form){
      $preguntas = array();
        $aciertos =0;
        $fallos = 0;
        foreach($form as $id => $respuesta){
            $pregunta = EncPreguntaPeer::retrieveByPK($id);
            if($pregunta->checkRespuesta($respuesta))$aciertos++;
            else $fallos++;
        }
        $calificacion =($aciertos*10)/count($form);
        $calificacion = floor($calificacion);
        $evaluacion = new EncEvaluacion();
        $evaluacion->setAciertos($aciertos);
        $evaluacion->setFallos($fallos);
        $evaluacion->setCalificacion($calificacion);
        $evaluacion->save();
        return $evaluacion;

  }
}
